package com.xiaojiezhu.shiro.base.pool;

import org.apache.commons.pool2.PooledObject;
import org.apache.commons.pool2.PooledObjectFactory;
import org.apache.commons.pool2.impl.DefaultPooledObject;

/**
 * @Author 朱小杰
 * 时间 2017-08-07 .23:33
 * 说明 ...
 */
public class ConnectionPoolFactory implements PooledObjectFactory<Connection> {
    /**
     * 创建对象
     * @return
     * @throws Exception
     */
    @Override
    public PooledObject<Connection> makeObject() throws Exception {
        PooledObject<Connection> con = new DefaultPooledObject<>(new Connection());
        return con;
    }

    /**
     * 销毁对象
     * @param p
     * @throws Exception
     */
    @Override
    public void destroyObject(PooledObject<Connection> p) throws Exception {
        Connection object = p.getObject();
        object.setEnable(false);
        object.close();
    }

    /**
     * 检测对象是否有效
     * @param p
     * @return
     */
    @Override
    public boolean validateObject(PooledObject<Connection> p) {
        return p.getObject().isEnable();
    }

    /**
     * 当对象无效时，重新激活此对象,获取对象时，也会调这个方法
     * @param p
     * @throws Exception
     */
    @Override
    public void activateObject(PooledObject<Connection> p) throws Exception {
        p.getObject().setEnable(true);
    }

    /**
     * 钝化一个对象。在向对象池归还一个对象是会调用这个方法。这里可以对对象做一些清理操作。比如清理掉过期的数据，下次获得对象时，不受旧数据的影响。
     * @param p
     * @throws Exception
     */
    @Override
    public void passivateObject(PooledObject<Connection> p) throws Exception {

    }
}
